package com.mashibing.rocketmq;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

import java.util.ArrayList;

/**
 * @Author: JLL
 * @Date: 2020/2/29 19:53
 */
public class Producer {

    public static void main(String[] args) throws Exception{
        //这好比是一个group
        DefaultMQProducer producer = new DefaultMQProducer("xoxogp");

        // 设置nameserver地址    它起到路由和发现服务的功能、
        producer.setNamesrvAddr("192.168.150.133:9876");
        //这就启动一个producer了。
        producer.start();
        // topic ：消息将要发送到的地址  （它是逻辑上的概念，类似于activeMQ里的destination）
        // 它会自动分配给到topic上的一个queue，
        // body  ：消息中的具体数据
        Message msg1 = new Message("myTopic001", "xxxxooo 第一条".getBytes());
        Message msg2 = new Message("myTopic001", "xxxxooo 第2条".getBytes());
        Message msg3 = new Message("myTopic001", "xxxxooo 第3条".getBytes());
        Message msg4 = new Message("myTopic001", "xxxxooo 第4条".getBytes());

        ArrayList<Message> list = new ArrayList<>();
        list.add(msg1);
        list.add(msg2);
        list.add(msg3);
        list.add(msg4);

        // 这叫同步消息发送、、  啥叫同步，再说一次，就是p发完消息之后，等待broker给一个确认。才会继续执行下面的命令、这种不会丢消息、
        //这个SendResult 就是broker返回的消息
        /**
         * producer要发消息了，那肯定要指定一个地址。但是mq不允许直接指定到一个broker，
         * topic在哪个broker上，现在还不一定。所以只能去连nameserver
         */
        //批量发送消息，官方建议数据量不要太大，不要超过1M
        SendResult sendResult3 = producer.send(list);
        System.out.println(sendResult3);
//        producer.shutdown();
        System.out.println("已经停机");
    }
}
